﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using CLab.Common.View.Utils.Extensions;
using CLab.Common.Constantes;
using System.Collections;
using CLab.Base;
using System.Data;
using GandA.Component.Log;
using GandA.Web.UI.Controls;
using System.Web.Services;
using CLab.Utils.Extensions;

namespace CLab.PagAdminLab
{
    public partial class Recepcion : PageBase
    {
        #region Propiedades
        public int? IdPaciente
        {
            get;
            set;
        }
        #endregion

        #region Eventos
        protected void Page_Init(object sender, EventArgs e)
        {
            IdItem = 2;
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (!Page.IsPostBack)
                {
                    Session.Remove("estudios");
                    InicializaPantalla();
                }
            }
            catch (Exception ex)
            {
                Log.WriteLog(ex, "Error en: Page_Load");
                Master.alert(ex.Message);
            }
        }

        protected void Page_LoadComplete(object sender, EventArgs e)
        {
            if (Page.IsPostBack)
            {
                //if (gridEstudios.Rows.Count > 0)
                //{
                //    if (gridEstudios.Rows[0].Cells[0].Text == "No se han agregado estudios")
                //    {
                //        CargaGrid(true);
                //    }
                //}
                //else
                //{
                    //CargaGrid(true);
                //}
            }
            else
            {
                txtNombre.ControlTextBox.Focus();
            }
        }

        protected void cmbEstado_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {   
                cmbMunicipio.DataTextField = Columnas.NombreMunicipio;
                cmbMunicipio.DataValueField = Columnas.IdMunicipio;
                cmbMunicipio.ObtenMunicipio(CLab.Common.Util.Convert.ToNInt(cmbEstado.SelectedValue));
                cmbMunicipio_SelectedIndexChanged(null, null);
                updMun.Update();
                ScriptManager.RegisterStartupScript(Page, typeof(Page), "ctrls", "var ctrl='" + cmbEstado.ControlComboBox.ClientID + "'", true);
            }
            catch (Exception ex)
            {
                Log.WriteLog(ex, "Error en: cmbEstado_SelectedIndexChanged");
                Master.alert(ex.Message);
            }
        }

        protected void cmbMunicipio_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                cmbColonia.DataTextField = Columnas.NombreColonia;
                cmbColonia.DataValueField = Columnas.IdColonia;
                cmbColonia.ObtenColonia(CLab.Common.Util.Convert.ToNInt(cmbEstado.SelectedValue), CLab.Common.Util.Convert.ToNInt(cmbMunicipio.SelectedValue));
                cmbColonia_SelectedIndexChanged(null, null);
                updCol.Update();
            }
            catch (Exception ex)
            {
                Log.WriteLog(ex, "Error en: cmbMunicipio_SelectedIndexChanged");
                Master.alert(ex.Message);
            }
        }

        protected void cmbColonia_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                if (cmbColonia.SelectedValue != null && cmbMunicipio.SelectedValue != null && cmbEstado.SelectedValue != null)
                {
                    ArrayList parametros = new ArrayList();
                    ConsultaServiceReference.ConsultaServiceClient servicio = new ConsultaServiceReference.ConsultaServiceClient();
                    //Parametros
                    parametros.Add(CreaParametroConsulta(Parametros.psCodigopostal, null, ConsultaServiceReference.Parameter.vEnumType.Int));
                    parametros.Add(CreaParametroConsulta(Parametros.pnIdColonia, cmbColonia.SelectedValue, ConsultaServiceReference.Parameter.vEnumType.Int));
                    parametros.Add(CreaParametroConsulta(Parametros.pnIdEstado, cmbEstado.SelectedValue, ConsultaServiceReference.Parameter.vEnumType.Int));
                    parametros.Add(CreaParametroConsulta(Parametros.pnIdMunicipio, cmbMunicipio.SelectedValue, ConsultaServiceReference.Parameter.vEnumType.Int));
                    ConsultaServiceReference.Parameter[] parameters = new ConsultaServiceReference.Parameter[parametros.Count];
                    parametros.CopyTo(parameters);
                    //Ejecuta conulta
                    DataSet ds = servicio.EjecutaConsultaConParametros("spObtenDireccionCP", parameters);
                    txtCodigoPostal.Text = ds.Tables[0].Rows[0][Columnas.CodigoPostal].ToString();
                    updCP.Update();
                }
            }
            catch (Exception ex)
            {
                Log.WriteLog(ex, "Error en: cmbColonia_SelectedIndexChanged");
                Master.alert(ex.Message);
            }
        }

        protected void txtCodigoPostal_TextChanged(object sender, EventArgs e)
        {
            try
            {
                if (!string.IsNullOrEmpty(txtCodigoPostal.Text.Trim()))
                {
                    ArrayList parametros = new ArrayList();
                    ConsultaServiceReference.ConsultaServiceClient servicio = new ConsultaServiceReference.ConsultaServiceClient();
                    //Parametros
                    parametros.Add(CreaParametroConsulta(Parametros.psCodigopostal, txtCodigoPostal.Text, ConsultaServiceReference.Parameter.vEnumType.Int));
                    parametros.Add(CreaParametroConsulta(Parametros.pnIdColonia, null, ConsultaServiceReference.Parameter.vEnumType.Int));
                    parametros.Add(CreaParametroConsulta(Parametros.pnIdEstado, null, ConsultaServiceReference.Parameter.vEnumType.Int));
                    parametros.Add(CreaParametroConsulta(Parametros.pnIdMunicipio, null, ConsultaServiceReference.Parameter.vEnumType.Int));
                    ConsultaServiceReference.Parameter[] parameters = new ConsultaServiceReference.Parameter[parametros.Count];
                    parametros.CopyTo(parameters);
                    //Ejecuta conulta
                    DataSet ds = servicio.EjecutaConsultaConParametros("spObtenDireccionCP", parameters);
                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        cmbEstado.SelectedValue = ds.Tables[0].Rows[0][Columnas.IdEstado].ToString();
                        
                        cmbMunicipio.DataTextField = Columnas.NombreMunicipio;
                        cmbMunicipio.DataValueField = Columnas.IdMunicipio;
                        cmbMunicipio.ObtenMunicipio(CLab.Common.Util.Convert.ToNInt(cmbEstado.SelectedValue));

                        cmbMunicipio.SelectedValue = ds.Tables[0].Rows[0][Columnas.IdMunicipio].ToString();
                        cmbColonia.DataTextField = Columnas.NombreColonia;
                        cmbColonia.DataValueField = Columnas.IdColonia;
                        cmbColonia.ObtenColonia(CLab.Common.Util.Convert.ToNInt(cmbEstado.SelectedValue), CLab.Common.Util.Convert.ToNInt(cmbMunicipio.SelectedValue));
                        if (ds.Tables[0].Rows.Count == 1)
                        {
                            cmbColonia.SelectedValue = ds.Tables[0].Rows[0][Columnas.IdColonia].ToString();
                        }

                        updEdo.Update();
                        updMun.Update();
                        updCol.Update();
                    }
                }
            }
            catch (Exception ex)
            {
                Log.WriteLog(ex, "Error en: txtCodigoPostal_TextChanged");
                Master.alert(ex.Message);
            }
        }

        //protected void chkNuevo_CheckedChanged(object sender, EventArgs e)
        //{
        //    if (chkNuevo.Checked)
        //    {
        //        pnlNombre.Style.Add("display", "block");
        //        cmbPaciente.Style.Add("display", "none");
        //        if (cmbPaciente.ControlComboBox.Items.Count > 0)
        //            cmbPaciente.SelectedIndex = cmbPaciente.ControlComboBox.Items.Count - 1;
        //        LimpiaControles();
        //        txtNombre.Focus();
        //    }
        //    else
        //    {
        //        pnlNombre.Style.Add("display", "none");
        //        cmbPaciente.Style.Add("display", "block");
        //        txtNombre.Text = "";
        //        txtApellidoPaterno.Text = "";
        //        txtApellidoMaterno.Text = "";
        //        cmbPaciente.Focus();
        //    }
        //}

        protected void btnNuevo_Click(object sender, EventArgs e)
        {
            try
            {
                Limpiar();
                //chkNuevo.Checked = false;
                //chkNuevo_CheckedChanged(null, null);
            }
            catch (Exception ex)
            {
                Log.WriteLog(ex, "Error en: btnNuevo_Click");
                Master.alert(ex.Message);
            }
        }

        protected void gridEstudios_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                string[] sParams;
                switch (e.CommandName)
                {
                    //case "cmdEliminar":
                    //    sParams = e.CommandArgument.ToString().Split(',');
                    //    QuitaEstudio(CLab.Common.Util.Convert.ToNInt(sParams[0]).GetValueOrDefault(-1));
                    //    break;
                }
            }
            catch (Exception ex)
            {
                Log.WriteLog(ex, "Error en: gridEstudios_RowCommand");
                Master.alert(ex.Message);
            }
        }

        protected void gridEstudios_RowDataBound(object sender, GridViewRowEventArgs e)
        {
        }

        protected void btnAgregaEstudio_Click(object sender, EventArgs e)
        {
            try
            {
                InsertaRengon(hdnIdEstudio.Value, hdnNomEstudio.Value, string.IsNullOrEmpty(hdnPrecio.Value) ? 0 : CLab.Common.Util.Convert.ToDecimal(hdnPrecio.Value), string.IsNullOrEmpty(hdnEsPaquete.Value) ? 0 : CLab.Common.Util.Convert.ToInt(hdnEsPaquete.Value));
                hdnIdEstudio.Value = null;
                hdnNomEstudio.Value = null;
                hdnEsPaquete.Value = "0";
                hdnPrecio.Value = "0";
            }
            catch (Exception ex)
            {
                Master.alert(ex.Message);
            }
        }

        protected void btnAceptar_Click(object sender, EventArgs e)
        {
            try
            {
                if (((DataTable)Session["estudios"]).Rows.Count > 0)
                {
                    if (((DataTable)Session["estudios"]).Rows[0][Columnas.IdEstudio] != DBNull.Value)
                    {
                        int idRecibo = Guardar();
                        Imprimir(idRecibo);
                        Limpiar();
                    }
                    else
                    {
                        Master.alert("Favor de agregar estudios");
                    }
                }
                else
                {
                    Master.alert("Favor de agregar estudios");
                }
            }
            catch (Exception ex)
            {
                Log.WriteLog(ex, "Error en: btnAceptar_Click");
                Master.alert(ex.Message);
            }
        }

        protected void btnPaciente_Click(object sender, EventArgs e)
        {
            try
            {
                ConsultaPaciente();
            }
            catch (Exception ex)
            {
                Log.WriteLog(ex, "Error en: btnPaciente_Click");
                Master.alert(ex.Message);
            }
        }

        protected void btnCortesia_Click(object sender, EventArgs e)
        {
            try
            {
                string[] values = hdnEstudioCheck.Value.Split(',');

                System.Data.DataTable dt = (System.Data.DataTable)Session["estudios"];
                DataRow[] rows = dt.Select(Columnas.IdEstudio + "=" + values[0]);
                rows[0][Columnas.EsCortesia] = 1;
                ((System.Web.UI.WebControls.CheckBox)gridEstudios.Rows[Convert.ToInt32(values[2])].FindControl("chkCortesia")).Checked = Convert.ToBoolean(values[1]);
                LblTotal.Text = "$" + (CLab.Common.Util.Convert.ToDecimal(LblTotal.Text) + CLab.Common.Util.Convert.ToDecimal(values[3])).ToString();
            }
            catch (Exception ex)
            {
                Log.WriteLog(ex, "Error en: btnCortesia_Click");
                Master.alert(ex.Message);
            }
        }

        protected void btnElimina_Click(object sender, EventArgs e)
        {
            try
            {
                int idEstudio = Common.Util.Convert.ToNInt(hdnIdEstudio.Value).GetValueOrDefault(-1);
                QuitaEstudio(idEstudio);
            }
            catch (Exception ex)
            {
                Log.WriteLog(ex, "Error en: btnElimina_Click");
                Master.alert(ex.Message);
            }
        }

        //protected void cmbPaciente_SelectedIndexChanged(object sender, EventArgs e)
        //{
        //    if (cmbPaciente.SelectedValue != null)
        //    {
        //        if (cmbPaciente.SelectedValue != "-1")
        //        {
        //            CargaGrid(true);
        //        }
        //    }
        //}

        #endregion

        #region Metodos
        private void Limpiar()
        {
            hdnIdEstudio.Value = "";
            hdnNomEstudio.Value = "";
            hdnPrecio.Value = "";
            hdnRecibo.Value="";
            hdnReciboDinero.Value="";
            hdnIdPaciente.Value = "";
            txtNombre.Text = "";
            txtApellidoPaterno.Text = "";
            txtApellidoMaterno.Text = "";
            cmbProcedencia.SelectedValue = "0";
            cmbDoctor.SelectedValue = "0";
            ddlTitulo.SelectedIndex = -1;
            TxtEdad.Text = "";
            ddlTiempo.SelectedIndex = -1;
            ddlSexo.SelectedIndex = -1;
            dpFur.Text = "";
            cmbEstado.SelectedIndex = -1;
            cmbEstado_SelectedIndexChanged(null, null);
            cmbMunicipio.SelectedIndex = -1;
            cmbMunicipio_SelectedIndexChanged(null, null);
            txtCodigoPostal.Text = "";
            cmbColonia.SelectedIndex = -1;
            cmbColonia_SelectedIndexChanged(null, null);
            txtCalle.Text = "";
            txtNumInt.Text = "";
            txtNumExt.Text = "";
            txtTelefono.Text = "";
            LblTotal.Text = "$0.00";
            CargaGrid(true);

            updEdo.Update();
            updMun.Update();
            updCol.Update();
            updCP.Update();

            txtNombre.Focus();
        }

        private void Imprimir(int idRecibo)
        {
            ReportName = ObtenConfiguracion(2).Valor1.ToString();
            ReportDataSorce = ObtenRecibo(idRecibo);
            ScriptManager.RegisterClientScriptBlock(btnAceptar, typeof(Page), "js", "Imprimir();", true);
        }

        private DataTable ObtenRecibo(int idRecibo)
        {
            ArrayList parametros = new ArrayList();
            ConsultaServiceReference.ConsultaServiceClient srv = new ConsultaServiceReference.ConsultaServiceClient();

            //Parámetros
            parametros.Add(CreaParametroConsulta("@pnRecibo", idRecibo, ConsultaServiceReference.Parameter.vEnumType.Int));
            parametros.Add(CreaParametroConsulta("@pnIdLaboratorio", SessionLaboratorio.IdLaboratorio, ConsultaServiceReference.Parameter.vEnumType.Int));
            parametros.Add(CreaParametroConsulta("@pnIdSucursal", SessionLaboratorio.IdSucursal, ConsultaServiceReference.Parameter.vEnumType.Int));

            ConsultaServiceReference.Parameter[] prms = new ConsultaServiceReference.Parameter[parametros.Count];
            parametros.CopyTo(prms);

            return srv.EjecutaConsultaConParametros("spReporteRecibo", prms).Tables[0];
        }

        private void ConsultaPaciente()
        {
            ArrayList parametros = new ArrayList();
            ConsultaServiceReference.ConsultaServiceClient srv = new ConsultaServiceReference.ConsultaServiceClient();

            //Parámetros
            parametros.Add(CreaParametroConsulta("@pnIdPaciente", hdnIdPaciente.Value, ConsultaServiceReference.Parameter.vEnumType.Int));
            parametros.Add(CreaParametroConsulta("@pnIdLaboratorio", SessionLaboratorio.IdLaboratorio, ConsultaServiceReference.Parameter.vEnumType.Int));
            parametros.Add(CreaParametroConsulta("@pnIdSucursal", SessionLaboratorio.IdSucursal, ConsultaServiceReference.Parameter.vEnumType.Int));

            ConsultaServiceReference.Parameter[] prms = new ConsultaServiceReference.Parameter[parametros.Count];
            parametros.CopyTo(prms);

            DataSet ds= srv.EjecutaConsultaConParametros("spObtenPacienteRecibo", prms);
            if (ds.Tables[0].Rows.Count > 0)
            {
                DataRow dr = ds.Tables[0].Rows[0];
                hdnIdPaciente.Value = dr[Columnas.IdPaciente].ToString();
                txtNombre.Text = dr[Columnas.Nombre].ToString();
                txtApellidoPaterno.Text = dr[Columnas.ApellidoPaterno].ToString();
                txtApellidoMaterno.Text = dr[Columnas.ApellidoMaterno].ToString();
                ddlTitulo.SelectedValue = CLab.Common.Util.Convert.ToNInt(dr[Columnas.IdTitulo]).GetValueOrDefault(0).ToString();
                TxtEdad.Text = dr[Columnas.Edad].ToString();
                ddlTiempo.SelectedValue = CLab.Common.Util.Convert.ToNInt(dr[Columnas.IdTiempo]).GetValueOrDefault(0).ToString();
                ddlSexo.SelectedValue = CLab.Common.Util.Convert.ToNInt(dr[Columnas.IdSexo]).GetValueOrDefault(0).ToString();
                dpFur.Text = dr[Columnas.fur] == DBNull.Value ? "" : CLab.Common.Util.Convert.ToDateTime(dr[Columnas.fur]).ToShortDateString();
                cmbEstado.SelectedValue = CLab.Common.Util.Convert.ToNInt(dr[Columnas.IdEstado]).GetValueOrDefault(0).ToString();
                cmbEstado_SelectedIndexChanged(null, null);
                cmbMunicipio.SelectedValue = CLab.Common.Util.Convert.ToNInt(dr[Columnas.IdMunicipio]).GetValueOrDefault(0).ToString();
                cmbMunicipio_SelectedIndexChanged(null, null);
                txtCodigoPostal.Text = dr[Columnas.CodigoPostal].ToString();
                cmbColonia.SelectedValue = CLab.Common.Util.Convert.ToNInt(dr[Columnas.IdColonia]).GetValueOrDefault(0).ToString();
                txtCalle.Text = dr[Columnas.Calle].ToString();
                txtNumExt.Text = dr[Columnas.NumeroExt].ToString();
                txtNumInt.Text = dr[Columnas.NumeroInt].ToString();
                txtTelefono.Text = dr[Columnas.Telefono].ToString();
                cmbProcedencia.SelectedValue = CLab.Common.Util.Convert.ToNInt(dr[Columnas.IdProcedencia]).GetValueOrDefault(0).ToString();
                cmbDoctor.SelectedValue = CLab.Common.Util.Convert.ToNInt(dr[Columnas.IdDoctor]).GetValueOrDefault(0).ToString();

                updEdo.Update();
                updMun.Update();
                updCol.Update();
                updCP.Update();
            }
        }

        private int Guardar()
        {
            RecepcionServiceReference.Recepcion recepcion = new RecepcionServiceReference.Recepcion();
            recepcion = ObtenInformacion();
            RecepcionServiceReference.RecepcionServiceClient srv = new RecepcionServiceReference.RecepcionServiceClient();
            int idRecibo = srv.RegistraRecepcion(recepcion);
            Master.alert("Cambio: " + (CLab.Common.Util.Convert.ToDecimal(hdnReciboDinero.Value) - CLab.Common.Util.Convert.ToDecimal(LblTotal.Text)).ToString());
            return idRecibo;
        }

        private RecepcionServiceReference.Recepcion ObtenInformacion()
        {
            RecepcionServiceReference.Recepcion r = new RecepcionServiceReference.Recepcion();
            r.IdUsuarioMod = SessionUsuario.IdUsuario;
            r.IpMod = Request.UserHostAddress;
            r.Paciente = new RecepcionServiceReference.Paciente();
            r.Paciente.IdPaciente = CLab.Common.Util.Convert.ToInt(hdnIdPaciente.Value);
            r.Paciente.Nombre = txtNombre.Text;
            r.Paciente.ApellidoPaterno = txtApellidoPaterno.Text;
            r.Paciente.ApellidoMaterno = txtApellidoMaterno.Text;
            r.Paciente.IdTitulo = CLab.Common.Util.Convert.ToNInt(ddlTitulo.SelectedValue).GetValueOrDefault(-1);
            r.Paciente.Edad = CLab.Common.Util.Convert.ToNInt(TxtEdad.Text).GetValueOrDefault(-1);
            r.Paciente.IdTiempo = CLab.Common.Util.Convert.ToNInt(ddlTiempo.SelectedValue).GetValueOrDefault(-1);
            r.Paciente.IdSexo = CLab.Common.Util.Convert.ToNInt(ddlSexo.SelectedValue).GetValueOrDefault(-1);
            r.Paciente.fur = CLab.Common.Util.Convert.ToDateTime(dpFur.Text);
            r.Paciente.IdEstado = CLab.Common.Util.Convert.ToNInt(cmbEstado.SelectedValue).GetValueOrDefault(-1);
            r.Paciente.IdMunicipio = CLab.Common.Util.Convert.ToNInt(cmbMunicipio.SelectedValue).GetValueOrDefault(-1);
            r.Paciente.CodigoPostal = CLab.Common.Util.Convert.ToNInt(txtCodigoPostal.Text).GetValueOrDefault(-1);
            r.Paciente.IdColonia = CLab.Common.Util.Convert.ToNInt(cmbColonia.SelectedValue).GetValueOrDefault(-1);
            r.Paciente.Calle = txtCalle.Text;
            r.Paciente.NumeroExt = txtNumExt.Text;
            r.Paciente.NumeroInt = txtNumInt.Text;
            r.Paciente.Telefono = txtTelefono.Text;
            r.Paciente.IdProcedencia = CLab.Common.Util.Convert.ToNInt(cmbProcedencia.SelectedValue).GetValueOrDefault(-1);
            r.Paciente.IdDoctor = CLab.Common.Util.Convert.ToNInt(cmbDoctor.SelectedValue).GetValueOrDefault(-1);
            r.Paciente.IdLaboratorio = SessionLaboratorio.IdLaboratorio;
            r.Paciente.IdSucursal = SessionLaboratorio.IdSucursal;
            r.Recibo = new RecepcionServiceReference.Recibo();
            r.Recibo.EsPagado = 0;
            r.Recibo.DetalleXml = ((System.Data.DataTable)Session["estudios"]).ToXml();

            return r;
        }

        private void InsertaRengon(string idEstudio, string nombreEstudio, decimal precio, int esPaquete)
        {
            if (Session["estudios"] != null)
            {
                System.Data.DataTable dt = (System.Data.DataTable)Session["estudios"];
                //if (dt.Rows[0][Columnas.IdEstudio] == DBNull.Value)
                //{
                //    dt.Rows.Remove(dt.Rows[0]);
                //}

                dt.Rows.Add(0, 1, idEstudio, nombreEstudio, 0, precio, esPaquete);
                gridEstudios.DataSource = dt;
                gridEstudios.DataBind();
                LblTotal.Text = (CLab.Common.Util.Convert.ToDecimal(LblTotal.Text) + precio).ToString("$#,##0.00");
            }
        }

        private void QuitaEstudio(int idEstudio)
        {
            try
            {
                decimal Importe = 0;
                DataTable dt = (DataTable)Session["estudios"];
                DataRow[] dr = dt.Select("IdEstudio=" + idEstudio.ToString());
                foreach (DataRow dataRow in dr)
                {
                    Importe = Importe + Common.Util.Convert.ToNInt(dataRow[Columnas.EsCortesia]).GetValueOrDefault(0) == 1 ? Common.Util.Convert.ToNDecimal(dataRow[Columnas.Importe]).GetValueOrDefault(0) : 0;
                    dt.Rows.Remove(dataRow);
                }

                CargaGrid(false);
                if (gridEstudios.Rows.Count == 0)
                {
                    LblTotal.Text = "$0.00";
                }
                else
                {
                    LblTotal.Text = (CLab.Common.Util.Convert.ToDecimal(LblTotal.Text) - Importe).ToString("$#,##0.00");   
                }
            }
            catch (Exception ex)
            {
                Master.alert(ex.Message);
            }
        }

        private void InicializaPantalla()
        {
            Master.TituloPagina = "Recepción";
                        
            TxtEdad.ControlTextBox.Style.Add("text-align", "right");
            TxtEdad.EnabledFiltered = true;
            TxtEdad.FilterType = AjaxControlToolkit.FilterTypes.Numbers;

            txtCodigoPostal.EnabledFiltered = true;
            txtCodigoPostal.FilterType = AjaxControlToolkit.FilterTypes.Numbers;
            txtCodigoPostal.ControlTextBox.Style.Add("text-align", "right");

            txtNumExt.EnabledFiltered = true;
            txtNumExt.FilterType = AjaxControlToolkit.FilterTypes.Numbers;
            txtNumExt.ControlTextBox.Style.Add("text-align", "right");

            txtNumInt.EnabledFiltered = true;
            txtNumInt.FilterType = AjaxControlToolkit.FilterTypes.Numbers;
            txtNumInt.ControlTextBox.Style.Add("text-align", "right");

            txtTelefono.EnabledFiltered = true;
            txtTelefono.FilterType = AjaxControlToolkit.FilterTypes.Numbers;
            txtTelefono.ControlTextBox.Style.Add("text-align", "right");

            txtNombre.EnabledValidator = true;
            txtNombre.ControlTextBox.Attributes.Add("autocomplete", "off");
            txtApellidoPaterno.EnabledValidator = true;
            txtApellidoPaterno.ControlTextBox.Attributes.Add("autocomplete", "off");
            txtApellidoMaterno.ControlTextBox.Attributes.Add("autocomplete", "off");
            ddlTitulo.EnabledValidator = true;
            TxtEdad.EnabledValidator = true;
            ddlTiempo.EnabledValidator = true;
            ddlSexo.EnabledValidator = true;
            cmbEstado.EnabledValidator = true;
            cmbMunicipio.EnabledValidator = true;
            txtCodigoPostal.EnabledValidator = true;
            cmbColonia.EnabledValidator = true;
            txtCalle.EnabledValidator = true;
            cmbProcedencia.EnabledValidator = true;

            btnNuevo.CausesValidation = false;

            LlenaCombos();
            gridEstudios.EmptyDataText = "No se han agregado estudios";
            CargaGrid(true);
        }

        private void LlenaCombos()
        {
            ddlTitulo.ObtenTitulos();
            ddlTiempo.ObtenTiempo();
            ddlSexo.ObtenSexos();
            cmbEstado.ObtenEstados();
            cmbMunicipio.ObtenMunicipio(CLab.Common.Util.Convert.ToNInt(cmbEstado.SelectedValue));
            cmbColonia.ObtenColonia(CLab.Common.Util.Convert.ToNInt(cmbEstado.SelectedValue), CLab.Common.Util.Convert.ToNInt(cmbMunicipio.SelectedValue));
            cmbColonia_SelectedIndexChanged(null, null);
            cmbProcedencia.ObtenProcedencia(SessionLaboratorio.IdLaboratorio);
            cmbDoctor.ObtenDoctor(SessionLaboratorio.IdLaboratorio);
        }

        private System.Data.DataTable CreaTabla()
        {
            System.Data.DataTable tabla = new System.Data.DataTable();
            tabla.Columns.Add(Columnas.IdRecibo, typeof(int));
            tabla.Columns.Add(Columnas.IdReciboDet, typeof(int));
            tabla.Columns.Add(Columnas.IdEstudio, typeof(int));
            tabla.Columns.Add(Columnas.NombreEstudio, typeof(string));
            tabla.Columns.Add(Columnas.EsCortesia, typeof(int));
            tabla.Columns.Add(Columnas.Importe, typeof(decimal));
            tabla.Columns.Add(Columnas.EsPaquete, typeof(int));

            //tabla.Rows.Add(0, 1, null, "", 0, 0.0, 0);
            
            return tabla;
        }

        private void CargaGrid(bool soloEstructura)
        {
            System.Data.DataTable dt = new System.Data.DataTable();
            if (soloEstructura)
            {
                dt = CreaTabla();
                Session["estudios"] = dt;
                gridEstudios.DataSource = dt;
                gridEstudios.DataBind();

                //int TotalColumns = gridEstudios.Rows[0].Cells.Count;
                //gridEstudios.Rows[0].Cells.Clear();
                //gridEstudios.Rows[0].Cells.Add(new TableCell());
                //gridEstudios.Rows[0].Cells[0].ColumnSpan = TotalColumns;
                //gridEstudios.Rows[0].Cells[0].Text = "No se han agregado estudios";
                return;
            }
            else
            {
                if (Session["estudios"] != null)
                {
                    gridEstudios.DataSource = (System.Data.DataTable)Session["estudios"];
                    gridEstudios.DataBind();
                }
            }
        }

        private System.Data.DataTable ObtenEstudios()
        {
            ArrayList parametros = new ArrayList();
            ConsultaServiceReference.ConsultaServiceClient servicio = new ConsultaServiceReference.ConsultaServiceClient();
            //Parametros
            int? idPaciente = CLab.Common.Util.Convert.ToNInt(IdPaciente);
            parametros.Add(CreaParametroConsulta("@pnIdLaboratorio", SessionLaboratorio.IdLaboratorio, ConsultaServiceReference.Parameter.vEnumType.Int));
            parametros.Add(CreaParametroConsulta("@pnIdPaciente", idPaciente, ConsultaServiceReference.Parameter.vEnumType.Int));
            ConsultaServiceReference.Parameter[] prms = new ConsultaServiceReference.Parameter[parametros.Count];
            parametros.CopyTo(prms);
            //Ejecuta conulta
            return servicio.EjecutaConsultaConParametros("spObtenRecibo", prms).Tables[0];
        }

        public bool EsCortesia(object cortesia)
        {
            if (Common.Util.Convert.ToNInt(cortesia).GetValueOrDefault(0) == 1)
            {
                return true;
            }

            return false;
        }

        public string ObtenId(object id)
        {
            if (id != null)
            {
                return id.ToString();
            }

            return string.Empty;
        }

        #endregion

        #region Web Metodos
        [WebMethod]
        public static decimal ObtenPrecioEstudio(int idEstudio, int idLaboratorio, int esPaquete)
        {
            decimal precio = 0;
            ArrayList parametros = new ArrayList();
            ConsultaServiceReference.ConsultaServiceClient servicio = new ConsultaServiceReference.ConsultaServiceClient();
            //Parametros
            parametros.Add(new PageBase().CreaParametroConsulta(Parametros.pnIdLaboratorio, idLaboratorio, ConsultaServiceReference.Parameter.vEnumType.Int));
            parametros.Add(new PageBase().CreaParametroConsulta(Parametros.pnIdEstudio, idEstudio, ConsultaServiceReference.Parameter.vEnumType.Int));
            parametros.Add(new PageBase().CreaParametroConsulta(Parametros.pnEsPaquete, esPaquete, ConsultaServiceReference.Parameter.vEnumType.TinyInt));
            ConsultaServiceReference.Parameter[] parameters = new ConsultaServiceReference.Parameter[parametros.Count];
            parametros.CopyTo(parameters);
            //Ejecuta conulta
            DataSet ds = servicio.EjecutaConsultaConParametros("spObtenPrecioEstPaq", parameters);
            if (ds.Tables[0].Rows.Count > 0)
                precio = Convert.ToDecimal(ds.Tables[0].Rows[0][Columnas.Precio]);
            return precio;
        }
        #endregion
    }
}